//
//  YYHomeTableViewController.swift
//  YYWeibo
//
//  Created by strongwallyi on 15/12/26.
//  Copyright © 2015年 strongwallyi. All rights reserved.
//

import UIKit
import SVProgressHUD

class YYHomeTableViewController: YYVisitorTableViewController {

    //可重用标示符
    private let YYHomeCellReUseId = "YYHomeCellReUseId"
    
    //懒加载当前视图(tableView)对应的视图模型
    private lazy var statusListViewModel: YYStatusListViewModel = YYStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //判断是否有登陆
        if userLogin == false {
            visitorView.setupInfo(nil, messageText: nil)
            return
        }
        //设置 UI
        setupUI()
        //加载首页数据
        loadData()
    }
    
    private func setupUI(){
    
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: nil, action: "")

        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop",  target: self, action: "pop")
        setUpTabView()
    }
    
    //设置 tabview
    private func setUpTabView(){
        //注册 cell
        tableView.registerClass(YYStatusCell.self, forCellReuseIdentifier: YYHomeCellReUseId)
        
        //自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //设置预估行高,让 tabview 在滚动的时候自行去计算行高,且调整滚动的范围
        tableView.estimatedRowHeight = 300
        //隐藏分割线
        tableView.separatorStyle = .None
        
        //设置 tableView 的背景色
        tableView.backgroundColor = UIColor(white: 0.97, alpha: 1)
    
        //设置上拉加载的控件
        tableView.tableFooterView = pullUpView
        
        //添加值改变时要执行的事件
        yyrefreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        tableView.addSubview(yyrefreshControl)
    }
    
    
    //加载首页数据
    @objc private func loadData(){
        //只需要在这个地方调用方法关心加载是否成功
        statusListViewModel.loadData(pullUpView.isAnimating()) { (isSuccessed) -> () in
            if isSuccessed{
                //如果加载成功那么刷新数据
                self.tableView.reloadData()
            }else{
                SVProgressHUD.showErrorWithStatus("请求失败")
            }
            
            self.endRefresh()
        }
    }
    
    //结束刷新
    private func endRefresh(){
        pullUpView.stopAnimating()
        yyrefreshControl.endRefreshing()
    }
    
    @objc private func pop(){
        print("pop 点击")
        let vc = YYTempViewcontroller()
        navigationController?.pushViewController(vc, animated: true)
    }
    
    //上拉加载控件
    private lazy var pullUpView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView()
        //指定风格颜色和大小
        indicator.activityIndicatorViewStyle = .WhiteLarge
        indicator.color = UIColor.purpleColor()
        return indicator
    }()
    
    //懒加载下拉刷新控件
    private var yyrefreshControl: YYRefreshControl = YYRefreshControl()
}

//tableView 的数据源和代理方法
extension YYHomeTableViewController{
    
    //返回多少行
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statuses?.count ?? 0
    }

    //每一行的样式
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //注册 cell
        let cell = tableView.dequeueReusableCellWithIdentifier(YYHomeCellReUseId,forIndexPath: indexPath) as! YYStatusCell

        //设置数据
        cell.statusViewModel = statusListViewModel.statuses![indexPath.row]

        return cell
    }
    
    //将要显示某一个 cell 的时候会回调这个方法
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 判断如果是将要显示最后一行cell 的话就去执行加载数据的操作
        // pullUpView.isAnimating() --> 代表当前是不是正在上拉加载
        if indexPath.row == statusListViewModel.statuses!.count - 1 && pullUpView.isAnimating() == false{
            print("去加载数据")
            //开始动画
            pullUpView.startAnimating()
            //加载数据
            loadData()
        }
    }
}
